package hot100;

import java.util.HashMap;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/9/11 17:28
 */
public class lc560和为k子数组 {


    public int solve(int nums[],int k){
        HashMap<Integer,Integer> map = new HashMap<>();
        int sum = 0, ans = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if(sum == k){
                ans++;
            }
            if(map.containsKey(sum - k)){
                ans += map.get(sum - k);
            }
            map.put(sum,map.getOrDefault(sum,0) + 1);
        }
        return ans;
    }

    /*
     和 为 target 的最短子数组的长度
     数组中都是正数
     给一个 无序的正数 数组 nums, 和 一个 target
     */

    public int sovle(int nums[],int target){
        int sum = 0, ans = nums.length;
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if(sum == target){
                ans = Math.min(i + 1,ans);
            }
            if(map.containsKey(sum - target)){
                ans = Math.min(i - map.get(sum - target) + 1,ans);
            }
            map.put(sum,i);
        }
        return ans;
    }

}
